import { ref } from 'vue'
import {
  cancelOrder,
  deleteOrder,
  getPrescriptionPic,
  toggleFollow
} from '@/services/consult'
import type { ConsultOrderItem, FollowType } from '@/types/consult'
import { showImagePreview, showToast } from 'vant'
import { OrderType } from '@/enums'

// 暴露一个函数 useFollow 专门提供关注功能
// 这个函数调用时会返回一个对象, 里面包含要用到的
// loading 当前是否处理中布尔值
// follow 改变关注状态的函数
// 这里应该允许传入关注的类型, 如果不是医生, 掉接口的时候参数要改变
export const useFollow = (type: FollowType = 'doc') => {
  const loading = ref(false)
  // 点击关注时触发的函数
  const follow = async (item: { id: string; likeFlag: 0 | 1 }) => {
    // 一开始把按钮给锁住
    loading.value = true
    try {
      await toggleFollow(item.id, type)
      item.likeFlag = item.likeFlag === 1 ? 0 : 1
    } finally {
      // 无论成功还是失败都要执行的操作
      loading.value = false
    }
  }
  return { loading, follow }
}

// 封装处方显示
export const useShowPrescription = () => {
  const showPrescription = async (id?: string) => {
    if (id) {
      // 如果有处方id,获取处方图片地址
      const res = await getPrescriptionPic(id)
      // 用vant api显示图片
      showImagePreview([res.data.url])
    }
  }
  return { showPrescription }
}

// 封装取消订单功能
export const useCancelOrder = () => {
  const loading = ref(false)
  const cancelConsultOrder = async (item: ConsultOrderItem) => {
    loading.value = true

    await cancelOrder(item.id)
    item.status = OrderType.ConsultCancel
    item.statusValue = '已取消'
    showToast('取消成功')

    loading.value = false
  }

  return { loading, cancelConsultOrder }
}

// 删除订单功能
export const useDeleteOrder = (cb: () => void) => {
  // 删除订单
  const deleteLoading = ref(false)
  const deleteConsultOrder = async (item: ConsultOrderItem) => {
    deleteLoading.value = true

    await deleteOrder(item.id)
    showToast('删除成功')
    // 删除成功需要这个卡片消失, 需要通知父页面清理这个数据
    // emit('on-delete', item.id)
    // 将没法封装的动作作为回调函数传入, 每当到这的时候自动执行即可
    cb()

    deleteLoading.value = false
  }

  return { deleteLoading, deleteConsultOrder }
}
